const pages = require("./src/entry/entry");
const path = require("path");
const CompressionWebpackPlugin = require("compression-webpack-plugin");
const TerserPlugin = require("terser-webpack-plugin");
const productionGzipExtensions = ["js", "css"];
const isProduction = process.env.NODE_ENV === "production";
const webpack = require("webpack");

function resolve(dir) {
  return path.join(__dirname, dir);
}

module.exports = {
  pages: pages,
  lintOnSave: true, // 是否开启eslint保存检测，有效值：ture | false | 'error'
  productionSourceMap: false,
  filenameHashing: true,
  // css: {
  //   loaderOptions: {
  //     postcss: {
  //       plugins: [
  //         require('postcss-px2rem')({
  //           // rootValue: 100, //换算基数， 默认100  ，这样的话把根标签的字体规定为1rem为50px,这样就可以从设计稿上量出多少个px直接在代码中写多上px了。
  //           // unitPrecision: 5, //允许REM单位增长到的十进制数字。
  //           //propWhiteList: [],  //默认值是一个空数组，这意味着禁用白名单并启用所有属性。
  //           // propBlackList: [], //黑名单
  //           exclude: /(node_module)/,  //默认false，可以（reg）利用正则表达式排除某些文件夹的方法，例如/(node_module)/ 。如果想把前端UI框架内的px也转换成rem，请把此属性设为默认值
  //           // selectorBlackList: [], //要忽略并保留为px的选择器
  //           // ignoreIdentifier: false,  //（boolean/string）忽略单个属性的方法，启用ignoreidentifier后，replace将自动设置为true。
  //           // replace: true, // （布尔值）替换包含REM的规则，而不是添加回退。
  //           mediaQuery: false,  //（布尔值）允许在媒体查询中转换px。
  //           minPixelValue: 3 //设置要替换的最小像素值(3px会被转rem)。 默认 0
  //         }),
  //       ]
  //     }
  //   }
  // },
  chainWebpack: config => {
    config.plugin("provide").use(webpack.ProvidePlugin, [
      {
        $: "jquery",
        jquery: "jquery",
        jQuery: "jquery",
        "window.jQuery": "jquery"
      }
    ]);
    config.resolve.alias
      .set("api", resolve("src/api"))
      .set("components", resolve("src/components"))
      .set("store", resolve("src/store"))
      .set("assets", resolve("src/assets"))
      .set("config", resolve("src/config"))
      .set("filters", resolve("src/filters"))
      .set("mixins", resolve("src/mixins"))
      .set("styles", resolve("src/styles"))
      .set("mixins", resolve("src/mixins"))
      .set("libs", resolve("src/libs"));
  },
  configureWebpack: config => {
    if (isProduction) {
      config.plugins.push(
        new CompressionWebpackPlugin({
          algorithm: "gzip",
          test: new RegExp("\\.(" + productionGzipExtensions.join("|") + ")$"),
          threshold: 10240,
          minRatio: 0.8
        })
      );
      config.plugins.push(
        new TerserPlugin({
          terserOptions: {
            ecma: undefined,
            warnings: false,
            parse: {},
            compress: {
              drop_console: true,
              drop_debugger: false,
              pure_funcs: ["console.log"] // 移除console
            }
          }
        })
      );

      // // 开启分离js
      // config.optimization = {
      //   runtimeChunk: 'single',
      //   splitChunks: {
      //     chunks: 'all',
      //     maxInitialRequests: Infinity,
      //     minSize: 20000,
      //     cacheGroups: {
      //       vendor: {
      //         test: /[\\/]node_modules[\\/]/,
      //         name (module) {
      //           // get the name. E.g. node_modules/packageName/not/this/part.js
      //           // or node_modules/packageName
      //           const packageName = module.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1]
      //           // npm package names are URL-safe, but some servers don't like @ symbols
      //           return `npm.${packageName.replace('@', '')}`
      //         }
      //       }
      //     }
      //   }
      // };
      // 取消webpack警告的性能提示
      config.performance = {
        hints: 'warning',
        //入口起点的最大体积
        maxEntrypointSize: 50000000,
        //生成文件的最大体积
        maxAssetSize: 30000000,
        //只给出 js 文件的性能提示
        assetFilter: function(assetFilename) {
          return assetFilename.endsWith('.js');
        }
      };

    }
  },
  devServer: {
    open: true, // 打开浏览器
    port: 1808,
    proxy: {
      "/wps-api-check": {
        target: "http://127.0.0.1:32118/",
        changeOrigin: true,
        pathRewrite: {
          "^/wps-api-check": "/api/wps/check"
        }
      },
      "/yinshi-api": {
        target: "https://open.ys7.com/api/lapp/token/get",
        ws: true,
        changeOrigin: true,
        pathRewrite: {
          "^/yinshi-api": ""
        }
      }
      // "/ms-mcms": {
      //   target: "http://192.168.2.120:10084",
      //   changeOrigin: true,
      //   pathRewrite: {
      //     "^/ms-mcms": "/ms-mcms"
      //   }
      // },
      // "/articleApi/ms": {
      //   target: "http://192.168.2.120:10084/",
      //   changeOrigin: true,
      //   pathRewrite: {
      //     "^/articleApi": "/ms"
      //   }
      // }
    }
  }
};
